from itertools import dropwhile
from itertools import islice

# 跳过可迭代对象的开始部分，想遍历一个可迭代对象，但是想跳过开始的部分
def demo_1():
    with open('../temp/pome.txt') as f:
        # dropwhile函数，给它传递一个函数对象lambda和一个可迭代对象，返回一个迭代器对象，丢弃原有序列中直到函数返回False之前的所有元素
        for line in dropwhile(lambda l: l.startswith('#'), f):
            print(line, end='')

# itertools.islice函数，用于已经明确知道了要跳过的元素的个数
def demo_2():
    items = ['a', 'b', 'c', 1, 4, 10, 15]
    # 跳过前3个元素
    # 如果None和3的位置对调，意思就是仅仅获取前三个元素
    for x in islice(items, 3, None):
        print(x)

# 根据前缀跳过特定的文本
# 跳过开头为#的所有文本
def demo_3():
    with open('../temp/pome.txt') as f:
        lines = (line for line in f if not line.startswith("#"))
        for line in lines:
            print(line, end='')

if __name__ == '__main__':
    # demo_1()
    # demo_2()
    demo_3()